home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1995 June / MacFormat 25.iso / Shareware City / Developers / OutOfPhase1.1 Source / OutOfPhase Folder / NoteObject.h < prev    next >
Text File  |  1995-01-06  |  33KB  |  737 lines

  1. /* NoteObject.h */
  2.  
  3. #ifndef Included_NoteObject_h
  4. #define Included_NoteObject_h
  5.  
  6. /* NoteObject module depends on */
  7. /* MiscInfo.h */
  8. /* Audit */
  9. /* Debug */
  10. /* Definitions */
  11. /* BinaryCodedDecimal */
  12. /* Memory */
  13. /* Screen */
  14. /* Fractions */
  15. /* DrawCommand */
  16. /* DataMunging */
  17. /* Numbers */
  18. /* Frequency */
  19. /* MainWindowStuff */
  20. /* BufferedFileInput */
  21. /* BufferedFileOutput */
  22. /* TempoController */
  23.  
  24. #include "Screen.h"
  25. #include "BinaryCodedDecimal.h"
  26. #include "MainWindowStuff.h"
  27.  
  28. /* forward declarations */
  29. struct FractionRec;
  30. struct BufferedInputRec;
  31. struct BufferedOutputRec;
  32.  
  33. #ifdef ShowMe_NoteObjectRec
  34. /* declared publicly for fast access during play routines */
  35. struct NoteObjectRec
  36.     {
  37.         /* flags field.  if high bit is set, then it is a command and the low order */
  38.         /* bits are the opcode.  if high bit is clear, then it is a note and the low */
  39.         /* order bits determine the duration and some other information */
  40.         unsigned long                    Flags;
  41.  
  42.         /* data fields */
  43.         union
  44.             {
  45.                 struct
  46.                     {
  47.                         /* halfstep pitch index */
  48.                         short                                    Pitch;
  49.  
  50.                         /* portamento rate flag.  this parameter determines how long a portamento */
  51.                         /* transition should take, in fractions of a quarter note.  it only has */
  52.                         /* effect if this note is the target of a tie.  A value of 0 means it */
  53.                         /* should be instantaneous, i.e. no portamento. */
  54.                         SmallBCDType                    PortamentoDuration;
  55.  
  56.                         /* displacement forward and backward, in fractions of a quarter note. */
  57.                         /* this value is added to the current overall early/late adjust factor */
  58.                         /* as determined by the default and any adjustments or sweeps in progress */
  59.                         /* as initiated by channel commands */
  60.                         SmallBCDType                    EarlyLateAdjust;
  61.  
  62.                         /* note duration adjustment, in fractions of a quarter note.  this value */
  63.                         /* is either added to or multiplied by the duration to make the note run */
  64.                         /* longer or shorter.  this does not effect when subsequent notes start. */
  65.                         SmallBCDType                    DurationAdjust;
  66.  
  67.                         /* note to tie after completion of this note (NIL = none) */
  68.                         struct NoteObjectRec*    Tie;
  69.  
  70.                         /* these are fine tuning adjustment parameters.  they correspond to */
  71.                         /* some of the values that can be set by commands.  the values in */
  72.                         /* these parameters have effect over and above the effects of the */
  73.                         /* values set in the commands (i.e. the effects are cumulative) when */
  74.                         /* appropriate. */
  75.  
  76.                         /* release points as a fraction of the note's duration */
  77.                         /* these are relative to either the beginning of the note (key-down) or */
  78.                         /* the end of the note (duration counter runout) as determined by some */
  79.                         /* bits in the flags word.  If the flag indicates that the default origin */
  80.                         /* should be used, then this value is added to the channel overall/default */
  81.                         /* value, otherwise the default value is not used. */
  82.                         SmallBCDType                    ReleasePoint1;
  83.                         SmallBCDType                    ReleasePoint2;
  84.  
  85.                         /* adjustment for overall loudness envelope */
  86.                         /* this factor multiplicatively scales the output volume of the channel, */
  87.                         /* so a value of 1 leaves it unchanged.  This scaling is in addition to */
  88.                         /* the channel overall/default scaling, by multiplying the values. */
  89.                         SmallBCDType                    OverallLoudnessAdjustment;
  90.  
  91.                         /* left-right positioning adjustment for the note */
  92.                         /* this factor determines where the sound will come from when stereo */
  93.                         /* synthesis is being used.  -1 is far left, 1 is far right, and 0 is */
  94.                         /* center.  This is added to the channel overall/default position. */
  95.                         SmallBCDType                    StereoPositionAdjustment;
  96.  
  97.                         /* front-back positioning adjustment for the note */
  98.                         /* this factor determines where the sound will come from when surround */
  99.                         /* synthesis is being used.  1 is far front and -1 is far rear.  this */
  100.                         /* is added to the channel overall/default position */
  101.                         SmallBCDType                    SurroundPositionAdjustment;
  102.  
  103.                         /* special accent adjustments value for wave table generators */
  104.                         /* these factors are the base-2 log of multiplicative scaling factors. */
  105.                         /* therefore, 0 makes no change, 1 doubles the target value, and -1 */
  106.                         /* halves it.  the values are combined with the respective global */
  107.                         /* channel values via addition. */
  108.                         SmallBCDType                    Accent1;
  109.                         SmallBCDType                    Accent2;
  110.                         SmallBCDType                    Accent3;
  111.                         SmallBCDType                    Accent4;
  112.  
  113.                         /* then this is the pitch to use to select the sample or wave table from */
  114.                         /* the multisample list instead of Pitch.  if this is -1, then Pitch */
  115.                         /* should be used for sample selection. */
  116.                         short                                    MultisamplePitchAsIf;
  117.  
  118.                         /* adjustment factor for pitch displacement depth envelope amplitude. */
  119.                         /* this factor determines the depth of the frequency LFO generators. */
  120.                         /* the envelope controlling the depth is taken as a value from 0..1. */
  121.                         /* the value is multiplied by the overall channel value. */
  122.                         SmallBCDType                    PitchDisplacementDepthAdjustment;
  123.  
  124.                         /* adjustment factor for pitch displacement rate envelope amplitude. */
  125.                         /* this factor determines the rate of the frequency LFO generators.  the */
  126.                         /* envelope controlling the rate is taken as a value from 0..1.  this */
  127.                         /* parameter provides units, in periods per second, for scaling the rate */
  128.                         /* envelope output.  This value is added to the overall channel/default */
  129.                         /* value. */
  130.                         SmallBCDType                    PitchDisplacementRateAdjustment;
  131.  
  132.                         /* selection of pitch displacement envelope start point. */
  133.                         /* this specifies when the pitch displacement LFOs start.  this value */
  134.                         /* is relative to the start or end of the note, as determined by some */
  135.                         /* bits in the flags word.  If the flags specify that the default origin */
  136.                         /* should be used, then the value is added to the default start point, */
  137.                         /* otherwise the default start point is not used. */
  138.                         SmallBCDType                    PitchDisplacementStartPoint;
  139.  
  140.                         /* overall envelope rate adjustment. */
  141.                         /* this factor scales the total speed with which all envelopes associated */
  142.                         /* with the note undergo transitions.  A value of 1 does not change them, */
  143.                         /* smaller values accelerate transition.  This value is in addition to */
  144.                         /* the channel/default value via multiplication of the values. */
  145.                         SmallBCDType                    HurryUpFactor;
  146.  
  147.                         /* detuning in either Hertz or halfsteps. */
  148.                         /* this value specifies how much to detune the nominal pitch of the note. */
  149.                         /* the value is either in units of Hertz or halfsteps, as determined by */
  150.                         /* a bit in the flags word, and the detuning is added to the channel */
  151.                         /* overall/default detuning.  If the flags indicate that the default */
  152.                         /* pitch coversion should be used, then this value is multiplied by */
  153.                         /* the channel overall/default value to scale it. */
  154.                         SmallBCDType                    Detuning;
  155.                     }    Note;
  156.  
  157.                 struct
  158.                     {
  159.                         /* string argument for commands.  NIL means it hasn't been defined */
  160.                         char*                                    StringArgument;
  161.                         /* numeric arguments for commands */
  162.                         long                                    Argument1;
  163.                         long                                    Argument2;
  164.                         long                                    Argument3;
  165.                     } Command;
  166.             } a;
  167.     };
  168. #else
  169. struct NoteObjectRec;
  170. #endif
  171.  
  172. typedef struct NoteObjectRec NoteObjectRec;
  173.  
  174. /* note flags and duration stuff */
  175. #define BIT(x) (1UL << (x))
  176.  
  177. #define eDurationMask (BIT(0) | BIT(1) | BIT(2) | BIT(3))
  178. #define e64thNote (1 * BIT(0)) /* value 0 skipped */
  179. #define e32ndNote (2 * BIT(0))
  180. #define e16thNote (3 * BIT(0))
  181. #define e8thNote (4 * BIT(0))
  182. #define e4thNote (5 * BIT(0))
  183. #define e2ndNote (6 * BIT(0))
  184. #define eWholeNote (7 * BIT(0))
  185. #define eDoubleNote (8 * BIT(0))
  186. #define eQuadNote (9 * BIT(0))
  187.  
  188. #define eDivisionMask (BIT(4) | BIT(5))
  189. #define eDiv1Modifier (0 * BIT(4))
  190. #define eDiv3Modifier (1 * BIT(4))
  191. #define eDiv5Modifier (2 * BIT(4))
  192. #define eDiv7Modifier (3 * BIT(4))
  193.  
  194. #define eDotModifier (BIT(6))
  195. #define eFlatModifier (BIT(7))
  196. #define eSharpModifier (BIT(8))
  197. #define eRestModifier (BIT(9))
  198.  
  199. #define eRelease1OriginMask (BIT(10) | BIT(11))
  200. #define eRelease1FromDefault (1 * BIT(10))
  201. #define eRelease1FromStart (2 * BIT(10))
  202. #define eRelease1FromEnd (3 * BIT(10))
  203.  
  204. #define eRelease2OriginMask (BIT(12) | BIT(13))
  205. #define eRelease2FromDefault (1 * BIT(12))
  206. #define eRelease2FromStart (2 * BIT(12))
  207. #define eRelease2FromEnd (3 * BIT(12))
  208.  
  209. #define eRelease3FromStartNotEnd (BIT(14))
  210.  
  211. #define ePitchDisplacementStartOriginMask (BIT(15) | BIT(16))
  212. #define ePitchDisplacementStartFromDefault (1 * BIT(15))
  213. #define ePitchDisplacementStartFromStart (2 * BIT(15))
  214. #define ePitchDisplacementStartFromEnd (3 * BIT(15))
  215.  
  216. /* pitch lfo mode control has been moved to the lfo definition */
  217. #define eDEALLOCATED17 (BIT(17))
  218. #define eDEALLOCATED18 (BIT(18))
  219.  
  220. #define eDetuningModeMask (BIT(19) | BIT(20))
  221. #define eDetuningModeDefault (1 * BIT(19))
  222. #define eDetuningModeHalfSteps (2 * BIT(19))
  223. #define eDetuningModeHertz (3 * BIT(19))
  224.  
  225. #define eDurationAdjustMask (BIT(21) | BIT(22))
  226. #define eDurationAdjustDefault (1 * BIT(21))
  227. #define eDurationAdjustAdditive (2 * BIT(21))
  228. #define eDurationAdjustMultiplicative (3 * BIT(21))
  229.  
  230. #define eRetriggerEnvelopesOnTieFlag (BIT(23))
  231.  
  232. #define ePortamentoHertzNotHalfsteps (BIT(24))
  233.  
  234. #define eUnusedBitMask (BIT(25) | BIT(26) | BIT(27) | BIT(28) | BIT(29) | BIT(30) | BIT(31))
  235.  
  236. #define eCommandFlag (BIT(31))
  237.  
  238. /* commands (low order 31 bits of the flag word) */
  239. /* there are 4 parameters for commands: <1>, <2>, <3>, and <string> */
  240. /* commands <1>, <2>, and <3> can be interpreted as large BCD numbers (xx.xxxxxx), */
  241. /* extended small BCD numbers (xxxxx.xxx), or as integers */
  242. /* large is represented by <_l>, extended small is <_xs>, integer is <_i> */
  243. typedef enum
  244.     {
  245.         /* tempo adjustments */
  246.         eCmdRestoreTempo EXECUTE(= 17732), /* restore the tempo to the default for the score */
  247.         eCmdSetTempo, /* set tempo to <1xs> number of beats per minute */
  248.         eCmdIncTempo, /* add <1xs> to the tempo control */
  249.         eCmdSweepTempoAbs, /* <1xs> = target tempo, <2xs> = # of beats to reach it */
  250.         eCmdSweepTempoRel, /* <1xs> = target adjust (add to tempo), <2xs> = # beats */
  251.  
  252.         /* stereo positioning adjustments */
  253.         eCmdRestoreStereoPosition, /* restore stereo position to channel's default */
  254.         eCmdSetStereoPosition, /* set position in channel <1l>: -1 = left, 1 = right */
  255.         eCmdIncStereoPosition, /* adjust stereo position by adding <1l> */
  256.         eCmdSweepStereoAbs, /* <1l> = new pos, <2xs> = # of beats to get there */
  257.         eCmdSweepStereoRel, /* <1l> = pos adjust, <2xs> = # beats to get there */
  258.  
  259.         /* surround positioning adjustments */
  260.         eCmdRestoreSurroundPosition, /* restore surround position to channel's default */
  261.         eCmdSetSurroundPosition, /* set position in channel <1l>: 1 = front, -1 = rear */
  262.         eCmdIncSurroundPosition, /* adjust surround position by adding <1l> */
  263.         eCmdSweepSurroundAbs, /* <1l> = new pos, <2xs> = # of beats to get there */
  264.         eCmdSweepSurroundRel, /* <1l> = pos adjust, <2xs> = # beats to get there */
  265.  
  266.         /* overall volume adjustments */
  267.         eCmdRestoreVolume, /* restore the volume to the default for the channel */
  268.         eCmdSetVolume, /* set the volume to the specified level (0..1) in <1l> */
  269.         eCmdIncVolume, /* multiply <1l> by the volume control */
  270.         eCmdSweepVolumeAbs, /* <1l> = new volume, <2xs> = # of beats to reach it */
  271.         eCmdSweepVolumeRel, /* <1l> = volume adjust, <2xs> = # of beats to reach it */
  272.  
  273.         /* default release point adjustment values */
  274.         eCmdRestoreReleasePoint1, /* restore release point to master default */
  275.         eCmdSetReleasePoint1, /* set the default release point to new value <1l> */
  276.         eCmdIncReleasePoint1, /* add <1l> to default release point for adjustment */
  277.         eCmdReleasePointOrigin1, /* <1i> -1 = from start, 0 = from end of note */
  278.         eCmdSweepReleaseAbs1, /* <1l> = new release, <2xs> = # of beats to get there */
  279.         eCmdSweepReleaseRel1, /* <1l> = release adjust, <2xs> = # of beats to get there */
  280.  
  281.         eCmdRestoreReleasePoint2, /* restore release point to master default */
  282.         eCmdSetReleasePoint2, /* set the default release point to new value <1l> */
  283.         eCmdIncReleasePoint2, /* add <1l> to default release point for adjustment */
  284.         eCmdReleasePointOrigin2, /* <1i> -1 = from start, 0 = from end of note */
  285.         eCmdSweepReleaseAbs2, /* <1l> = new release, <2xs> = # of beats to get there */
  286.         eCmdSweepReleaseRel2, /* <1l> = release adjust, <2xs> = # of beats to get there */
  287.  
  288.         /* set the default accent values */
  289.         eCmdRestoreAccent1, /* restore accent value to master default */
  290.         eCmdSetAccent1, /* specify the new default accent in <1l> */
  291.         eCmdIncAccent1, /* add <1l> to the default accent */
  292.         eCmdSweepAccentAbs1, /* <1l> = new accent, <2xs> = # of beats to get there */
  293.         eCmdSweepAccentRel1, /* <1l> = accent adjust, <2xs> = # of beats to get there */
  294.  
  295.         eCmdRestoreAccent2, /* restore accent value to master default */
  296.         eCmdSetAccent2, /* specify the new default accent in <1l> */
  297.         eCmdIncAccent2, /* add <1l> to the default accent */
  298.         eCmdSweepAccentAbs2, /* <1l> = new accent, <2xs> = # of beats to get there */
  299.         eCmdSweepAccentRel2, /* <1l> = accent adjust, <2xs> = # of beats to get there */
  300.  
  301.         eCmdRestoreAccent3, /* restore accent value to master default */
  302.         eCmdSetAccent3, /* specify the new default accent in <1l> */
  303.         eCmdIncAccent3, /* add <1l> to the default accent */
  304.         eCmdSweepAccentAbs3, /* <1l> = new accent, <2xs> = # of beats to get there */
  305.         eCmdSweepAccentRel3, /* <1l> = accent adjust, <2xs> = # of beats to get there */
  306.  
  307.         eCmdRestoreAccent4, /* restore accent value to master default */
  308.         eCmdSetAccent4, /* specify the new default accent in <1l> */
  309.         eCmdIncAccent4, /* add <1l> to the default accent */
  310.         eCmdSweepAccentAbs4, /* <1l> = new accent, <2xs> = # of beats to get there */
  311.         eCmdSweepAccentRel4, /* <1l> = accent adjust, <2xs> = # of beats to get there */
  312.  
  313.         /* set pitch displacement depth adjustment */
  314.         eCmdRestorePitchDispDepth, /* restore max pitch disp depth value to default */
  315.         eCmdSetPitchDispDepth, /* set new max pitch disp depth <1l> */
  316.         eCmdIncPitchDispDepth, /* add <1l> to the default pitch disp depth */
  317.         eCmdSweepPitchDispDepthAbs, /* <1l> = new depth, <2xs> = # of beats */
  318.         eCmdSweepPitchDispDepthRel, /* <1l> = depth adjust, <2xs> = # of beats */
  319.  
  320.         /* set pitch displacement rate adjustment */
  321.         eCmdRestorePitchDispRate, /* restore max pitch disp rate to the master default */
  322.         eCmdSetPitchDispRate, /* set new max pitch disp rate in seconds to <1l> */
  323.         eCmdIncPitchDispRate, /* add <1l> to the default max pitch disp rate */
  324.         eCmdSweepPitchDispRateAbs, /* <1l> = new rate, <2xs> = # of beats to get there */
  325.         eCmdSweepPitchDispRateRel, /* <1l> = rate adjust, <2xs> = # of beats to get there */
  326.  
  327.         /* set pitch displacement start point, same way as release point */
  328.         eCmdRestorePitchDispStart, /* restore pitch disp start point to default */
  329.         eCmdSetPitchDispStart, /* set the start point to <1l> */
  330.         eCmdIncPitchDispStart, /* add <1l> to the pitch disp start point */
  331.         eCmdPitchDispStartOrigin, /* specify the origin, same as for release point <1i> */
  332.         eCmdSweepPitchDispStartAbs, /* <1l> = new vib start, <2xs> = # of beats */
  333.         eCmdSweepPitchDispStartRel, /* <1l> = vib adjust, <2xs> = # of beats */
  334.  
  335.         /* hurry up adjustment */
  336.         eCmdRestoreHurryUp, /* restore default hurryup factor */
  337.         eCmdSetHurryUp, /* set the hurryup factor to <1l> */
  338.         eCmdIncHurryUp, /* add <1l> to the hurryup factor */
  339.         eCmdSweepHurryUpAbs, /* <1l> = new hurryup factor, <2xs> = # of beats */
  340.         eCmdSweepHurryUpRel, /* <1l> = hurryup adjust, <2xs> = # of beats to get there */
  341.  
  342.         /* default detune */
  343.         eCmdRestoreDetune, /* restore the default detune factor */
  344.         eCmdSetDetune, /* set the detune factor to <1l> */
  345.         eCmdIncDetune, /* add <1l> to current detune factor */
  346.         eCmdDetuneMode, /* <1i>:  -1: Hertz, 0: half-steps */
  347.         eCmdSweepDetuneAbs, /* <1l> = new detune, <2xs> = # of beats */
  348.         eCmdSweepDetuneRel, /* <1l> = detune adjust, <2xs> = # of beats */
  349.  
  350.         /* default early/late adjust */
  351.         eCmdRestoreEarlyLateAdjust, /* restore the default early/late adjust value */
  352.         eCmdSetEarlyLateAdjust, /* set the early/late adjust value to <1l> */
  353.         eCmdIncEarlyLateAdjust, /* add <1l> to the current early/late adjust value */
  354.         eCmdSweepEarlyLateAbs, /* <1l> = new early/late adjust, <2xs> = # of beats */
  355.         eCmdSweepEarlyLateRel, /* <1l> = early/late delta, <2xs> = # of beats to get there */
  356.  
  357.         /* default duration adjust */
  358.         eCmdRestoreDurationAdjust, /* restore the default duration adjust value */
  359.         eCmdSetDurationAdjust, /* set duration adjust value to <1l> */
  360.         eCmdIncDurationAdjust, /* add <1l> to the current duration adjust value */
  361.         eCmdSweepDurationAbs, /* <1l> = new duration adjust, <2xs> = # of beats */
  362.         eCmdSweepDurationRel, /* <1l> = duration adjust delta, <2xs> = # of beats */
  363.         eCmdDurationAdjustMode, /* <1i>:  -1: Multiplicative, 0: Additive */
  364.  
  365.         /* set the meter.  this is used by the editor for placing measure bars. */
  366.         /* measuring restarts immediately after this command */
  367.         eCmdSetMeter, /* <1i> = numerator, <2i> = denominator */
  368.         /* immediately change the measure number */
  369.         eCmdSetMeasureNumber, /* <1i> = new number */
  370.  
  371.         /* set the track transpose to some number of half-steps */
  372.         eCmdSetTranspose, /* <1i> = signed number of half-steps */
  373.         eCmdAdjustTranspose, /* <1i> = added to the current transpose value */
  374.  
  375.         /* set and adjust effect control parameters */
  376.         eCmdSetEffectParam1, /* specify the new default effect parameter in <1l> */
  377.         eCmdIncEffectParam1, /* add <1l> to the default effect parameter */
  378.         eCmdSweepEffectParamAbs1, /* <1l> = new effect parameter, <2xs> = # of beats to get there */
  379.         eCmdSweepEffectParamRel1, /* <1l> = effect parameter adjust, <2xs> = # of beats to get there */
  380.  
  381.         eCmdSetEffectParam2, /* specify the new default effect parameter in <1l> */
  382.         eCmdIncEffectParam2, /* add <1l> to the default effect parameter */
  383.         eCmdSweepEffectParamAbs2, /* <1l> = new effect parameter, <2xs> = # of beats to get there */
  384.         eCmdSweepEffectParamRel2, /* <1l> = effect parameter adjust, <2xs> = # of beats to get there */
  385.  
  386.         eCmdSetEffectParam3, /* specify the new default effect parameter in <1l> */
  387.         eCmdIncEffectParam3, /* add <1l> to the default effect parameter */
  388.         eCmdSweepEffectParamAbs3, /* <1l> = new effect parameter, <2xs> = # of beats to get there */
  389.         eCmdSweepEffectParamRel3, /* <1l> = effect parameter adjust, <2xs> = # of beats to get there */
  390.  
  391.         eCmdSetEffectParam4, /* specify the new default effect parameter in <1l> */
  392.         eCmdIncEffectParam4, /* add <1l> to the default effect parameter */
  393.         eCmdSweepEffectParamAbs4, /* <1l> = new effect parameter, <2xs> = # of beats to get there */
  394.         eCmdSweepEffectParamRel4, /* <1l> = effect parameter adjust, <2xs> = # of beats to get there */
  395.  
  396.         /* track effect processor enable switch */
  397.         eCmdTrackEffectEnable, /* <1i>: -1 = enable, 0 = disable */
  398.  
  399.         /* set and adjust global score effect control parameters */
  400.         eCmdSetScoreEffectParam1, /* specify the new default score effect parameter in <1l> */
  401.         eCmdIncScoreEffectParam1, /* add <1l> to the default score effect parameter */
  402.         eCmdSweepScoreEffectParamAbs1, /* <1l> = new score effect parameter, <2xs> = # of beats to get there */
  403.         eCmdSweepScoreEffectParamRel1, /* <1l> = score effect parameter adjust, <2xs> = # of beats to get there */
  404.  
  405.         eCmdSetScoreEffectParam2, /* specify the new default score effect parameter in <1l> */
  406.         eCmdIncScoreEffectParam2, /* add <1l> to the default score effect parameter */
  407.         eCmdSweepScoreEffectParamAbs2, /* <1l> = new score effect parameter, <2xs> = # of beats to get there */
  408.         eCmdSweepScoreEffectParamRel2, /* <1l> = score effect parameter adjust, <2xs> = # of beats to get there */
  409.  
  410.         eCmdSetScoreEffectParam3, /* specify the new default score effect parameter in <1l> */
  411.         eCmdIncScoreEffectParam3, /* add <1l> to the default score effect parameter */
  412.         eCmdSweepScoreEffectParamAbs3, /* <1l> = new score effect parameter, <2xs> = # of beats to get there */
  413.         eCmdSweepScoreEffectParamRel3, /* <1l> = score effect parameter adjust, <2xs> = # of beats to get there */
  414.  
  415.         eCmdSetScoreEffectParam4, /* specify the new default score effect parameter in <1l> */
  416.         eCmdIncScoreEffectParam4, /* add <1l> to the default score effect parameter */
  417.         eCmdSweepScoreEffectParamAbs4, /* <1l> = new score effect parameter, <2xs> = # of beats to get there */
  418.         eCmdSweepScoreEffectParamRel4, /* <1l> = score effect parameter adjust, <2xs> = # of beats to get there */
  419.  
  420.         /* text marker in the score */
  421.         eCmdMarker /* <string> holds the text */
  422.     } NoteCommands;
  423.  
  424.  
  425. /* create a new note with space for the specified number of parameters */
  426. NoteObjectRec*                NewNote(void);
  427.  
  428. /* create a new command */
  429. NoteObjectRec*                NewCommand(void);
  430.  
  431. /* dispose of the note or command */
  432. void                                    DisposeNote(NoteObjectRec* Note);
  433.  
  434. /* find out what type of thing it is */
  435. MyBoolean                            IsItACommand(NoteObjectRec* Note);
  436.  
  437.  
  438. /* convert the duration of the note into a fraction */
  439. void                                    GetNoteDurationFrac(NoteObjectRec* Note, struct FractionRec* Frac);
  440.  
  441. /* draw the command on the screen, or measure how many pixels wide the image will be */
  442. /* if it will draw, it assumes the clipping rectangle to be set up properly */
  443. OrdType                                DrawCommandOnScreen(WinType* Window, OrdType X, OrdType Y,
  444.                                                 FontType Font, FontSizeType FontSize, OrdType FontHeight,
  445.                                                 NoteObjectRec* Note, MyBoolean ActuallyDraw, MyBoolean GreyedOut);
  446.  
  447. /* get a static null terminated string literal containing the name of a command */
  448. char*                                    GetCommandName(NoteCommands Command);
  449.  
  450. typedef enum
  451.     {
  452.         eNoParameters EXECUTE(= -425),
  453.         e1SmallExtParameter, /* <1xs> */
  454.         e2SmallExtParameters, /* <1xs> <2xs> */
  455.         e1LargeParameter, /* <1l> */
  456.         eFirstLargeSecondSmallExtParameters, /* <1l> <2xs> */
  457.         e1ParamReleaseOrigin, /* origin <1i> */
  458.         e1PitchDisplacementMode, /* hertz/steps <1i> */
  459.         e2IntegerParameters, /* <1i> <2i> */
  460.         e1DurationAdjustMode, /* multiplicative/additive <1i> */
  461.         e1IntegerParameter, /* <1i> */
  462.         e1StringParameterWithLineFeeds, /* <string> */
  463.         e1TrackEffectsMode /* enable/disable <1i> */
  464.     } CommandAddrMode;
  465.  
  466. /* get the addressing mode for a command */
  467. CommandAddrMode                GetCommandAddressingMode(NoteCommands Command);
  468.  
  469.  
  470. /* get the actual string argument contained in a command. NIL == not defined yet */
  471. char*                                    GetCommandStringArg(NoteObjectRec* Command);
  472.  
  473. /* get the first numeric argument contained in a command */
  474. long                                    GetCommandNumericArg1(NoteObjectRec* Command);
  475.  
  476. /* get the second numeric argument contained in a command */
  477. long                                    GetCommandNumericArg2(NoteObjectRec* Command);
  478.  
  479. /* get the third numeric argument contained in a command */
  480. long                                    GetCommandNumericArg3(NoteObjectRec* Command);
  481.  
  482. /* put a new string into the command.  the command becomes owner of the string. */
  483. void                                    PutCommandStringArg(NoteObjectRec* Command, char* NewArg);
  484.  
  485. /* put a new first numeric argument into the command */
  486. void                                    PutCommandNumericArg1(NoteObjectRec* Command, long NewValue);
  487.  
  488. /* put a new second numeric argument into the command */
  489. void                                    PutCommandNumericArg2(NoteObjectRec* Command, long NewValue);
  490.  
  491. /* put a new third numeric argument into the command */
  492. void                                    PutCommandNumericArg3(NoteObjectRec* Command, long NewValue);
  493.  
  494.  
  495. /* get the pitch of a note */
  496. short                                    GetNotePitch(NoteObjectRec* Note);
  497.  
  498. /* get the portamento transition time for the note */
  499. double                                GetNotePortamentoDuration(NoteObjectRec* Note);
  500.  
  501. /* get the early/late adjustment factor for a note */
  502. double                                GetNoteEarlyLateAdjust(NoteObjectRec* Note);
  503.  
  504. /* get the duration adjust value for a note */
  505. double                                GetNoteDurationAdjust(NoteObjectRec* Note);
  506.  
  507. /* get a pointer to the note that this note ties to or NIL if there is no tie */
  508. NoteObjectRec*                GetNoteTieTarget(NoteObjectRec* Note);
  509.  
  510. /* get the first release point position from a note */
  511. double                                GetNoteReleasePoint1(NoteObjectRec* Note);
  512.  
  513. /* get the second release point position from a note */
  514. double                                GetNoteReleasePoint2(NoteObjectRec* Note);
  515.  
  516. /* get the overall loudness factor for the note */
  517. double                                GetNoteOverallLoudnessAdjustment(NoteObjectRec* Note);
  518.  
  519. /* get the stereo positioning for the note */
  520. double                                GetNoteStereoPositioning(NoteObjectRec* Note);
  521.  
  522. /* get the surround positioning for the note */
  523. double                                GetNoteSurroundPositioning(NoteObjectRec* Note);
  524.  
  525. /* get the first accent factor for the note */
  526. double                                GetNoteAccent1(NoteObjectRec* Note);
  527.  
  528. /* get the second accent factor for the note */
  529. double                                GetNoteAccent2(NoteObjectRec* Note);
  530.  
  531. /* get the third accent factor for the note */
  532. double                                GetNoteAccent3(NoteObjectRec* Note);
  533.  
  534. /* get the fourth accent factor for the note */
  535. double                                GetNoteAccent4(NoteObjectRec* Note);
  536.  
  537. /* get the pitch that the table selector should treat the note as using */
  538. short                                    GetNoteMultisampleFalsePitch(NoteObjectRec* Note);
  539.  
  540. /* get the pitch displacement depth adjust factor for the note */
  541. double                                GetNotePitchDisplacementDepthAdjust(NoteObjectRec* Note);
  542.  
  543. /* get the pitch displacement rate adjust factor for the note */
  544. double                                GetNotePitchDisplacementRateAdjust(NoteObjectRec* Note);
  545.  
  546. /* get the pitch displacement envelope start point */
  547. double                                GetNotePitchDisplacementStartPoint(NoteObjectRec* Note);
  548.  
  549. /* get the hurryup factor for the note */
  550. double                                GetNoteHurryUpFactor(NoteObjectRec* Note);
  551.  
  552. /* get the detuning adjustment for the note */
  553. double                                GetNoteDetuning(NoteObjectRec* Note);
  554.  
  555.  
  556. /* change the pitch of a note */
  557. void                                    PutNotePitch(NoteObjectRec* Note, short NewPitch);
  558.  
  559. /* get the portamento transition time for the note */
  560. void                                    PutNotePortamentoDuration(NoteObjectRec* Note,
  561.                                                 double NewPortamentoDuration);
  562.  
  563. /* change the early/late adjustment factor for a note */
  564. void                                    PutNoteEarlyLateAdjust(NoteObjectRec* Note, double NewEarlyLate);
  565.  
  566. /* change the duration adjust value for a note */
  567. void                                    PutNoteDurationAdjust(NoteObjectRec* Note,
  568.                                                 double NewDurationAdjust);
  569.  
  570. /* change the pointer to the note that this note ties to. */
  571. void                                    PutNoteTieTarget(NoteObjectRec* Note, NoteObjectRec* NewTieTarget);
  572.  
  573. /* change the first release point position from a note */
  574. void                                    PutNoteReleasePoint1(NoteObjectRec* Note, double NewReleasePoint1);
  575.  
  576. /* change the second release point position from a note */
  577. void                                    PutNoteReleasePoint2(NoteObjectRec* Note, double NewReleasePoint2);
  578.  
  579. /* change the overall loudness factor for the note */
  580. void                                    PutNoteOverallLoudnessAdjustment(NoteObjectRec* Note,
  581.                                                 double NewLoudnessAdjust);
  582.  
  583. /* change the stereo positioning for the note */
  584. void                                    PutNoteStereoPositioning(NoteObjectRec* Note,
  585.                                                 double NewStereoPosition);
  586.  
  587. /* change the surround positioning for the note */
  588. void                                    PutNoteSurroundPositioning(NoteObjectRec* Note,
  589.                                                 double NewSurroundPosition);
  590.  
  591. /* change the first accent factor for the note */
  592. void                                    PutNoteAccent1(NoteObjectRec* Note, double NewAccent1);
  593.  
  594. /* change the second accent factor for the note */
  595. void                                    PutNoteAccent2(NoteObjectRec* Note, double NewAccent2);
  596.  
  597. /* change the third accent factor for the note */
  598. void                                    PutNoteAccent3(NoteObjectRec* Note, double NewAccent3);
  599.  
  600. /* change the fourth accent factor for the note */
  601. void                                    PutNoteAccent4(NoteObjectRec* Note, double NewAccent4);
  602.  
  603. /* change the pitch that the table selector should treat the note as using */
  604. void                                    PutNoteMultisampleFalsePitch(NoteObjectRec* Note,
  605.                                                 short NewFalsePitch);
  606.  
  607. /* change the pitch displacement depth adjust factor for the note */
  608. void                                    PutNotePitchDisplacementDepthAdjust(NoteObjectRec* Note,
  609.                                                 double NewPitchDisplacementDepthAdjust);
  610.  
  611. /* change the pitch displacement rate adjust factor for the note */
  612. void                                    PutNotePitchDisplacementRateAdjust(NoteObjectRec* Note,
  613.                                                 double NewPitchDisplacementRateAdjust);
  614.  
  615. /* change the pitch displacement envelope start point */
  616. void                                    PutNotePitchDisplacementStartPoint(NoteObjectRec* Note,
  617.                                                 double NewPitchDisplacementStartPoint);
  618.  
  619. /* change the hurryup factor for the note */
  620. void                                    PutNoteHurryUpFactor(NoteObjectRec* Note, double NewHurryUpFactor);
  621.  
  622. /* change the detuning adjustment for the note */
  623. void                                    PutNoteDetuning(NoteObjectRec* Note, double NewDetuning);
  624.  
  625.  
  626. /* get the opcode for a command */
  627. NoteCommands                    GetCommandOpcode(NoteObjectRec* Command);
  628.  
  629. /* put a new opcode in the command */
  630. void                                    PutCommandOpcode(NoteObjectRec* Command, NoteCommands NewOpcode);
  631.  
  632.  
  633. /* get the duration of a note */
  634. unsigned long                    GetNoteDuration(NoteObjectRec* Note);
  635.  
  636. /* get the duration division of a note */
  637. unsigned long                    GetNoteDurationDivision(NoteObjectRec* Note);
  638.  
  639. /* get the dot status of a note */
  640. MyBoolean                            GetNoteDotStatus(NoteObjectRec* Note);
  641.  
  642. /* get the flat or sharp status of a note */
  643. unsigned long                    GetNoteFlatOrSharpStatus(NoteObjectRec* Note);
  644.  
  645. /* get the rest status of a note */
  646. MyBoolean                            GetNoteIsItARest(NoteObjectRec* Note);
  647.  
  648. /* get the first release point origin of a note */
  649. unsigned long                    GetNoteRelease1Origin(NoteObjectRec* Note);
  650.  
  651. /* get the second release point origin of a note */
  652. unsigned long                    GetNoteRelease2Origin(NoteObjectRec* Note);
  653.  
  654. /* get the third release from start instead of end flag of a note */
  655. MyBoolean                            GetNoteRelease3FromStartInsteadOfEnd(NoteObjectRec* Note);
  656.  
  657. /* get the pitch displacement origin of a note */
  658. unsigned long                    GetNotePitchDisplacementStartOrigin(NoteObjectRec* Note);
  659.  
  660. /* get the detuning pitch conversion mode of a note */
  661. unsigned long                    GetNoteDetuneConversionMode(NoteObjectRec* Note);
  662.  
  663. /* get the retrigger envelope on tie status of a note */
  664. MyBoolean                            GetNoteRetriggerEnvelopesOnTieStatus(NoteObjectRec* Note);
  665.  
  666. /* get the duration adjustment mode of a note */
  667. unsigned long                    GetNoteDurationAdjustMode(NoteObjectRec* Note);
  668.  
  669. /* get a flag indicating that portamento should use Hertz instead of halfsteps */
  670. MyBoolean                            GetNotePortamentoHertzNotHalfstepsFlag(NoteObjectRec* Note);
  671.  
  672.  
  673. /* change the duration of a note */
  674. void                                    PutNoteDuration(NoteObjectRec* Note, unsigned long NewDuration);
  675.  
  676. /* change the duration division of a note */
  677. void                                    PutNoteDurationDivision(NoteObjectRec* Note,
  678.                                                 unsigned long NewDivision);
  679.  
  680. /* change the dot status of a note */
  681. void                                    PutNoteDotStatus(NoteObjectRec* Note, MyBoolean HasADot);
  682.  
  683. /* change the flat or sharp status of a note */
  684. void                                    PutNoteFlatOrSharpStatus(NoteObjectRec* Note,
  685.                                                 unsigned long NewFlatOrSharpStatus);
  686.  
  687. /* change the rest status of a note */
  688. void                                    PutNoteIsItARest(NoteObjectRec* Note, MyBoolean IsARest);
  689.  
  690. /* change the first release point origin of a note */
  691. void                                    PutNoteRelease1Origin(NoteObjectRec* Note,
  692.                                                 unsigned long NewReleasePoint1Origin);
  693.  
  694. /* change the second release point origin of a note */
  695. void                                    PutNoteRelease2Origin(NoteObjectRec* Note,
  696.                                                 unsigned long NewReleasePoitn2Origin);
  697.  
  698. /* change the third release from start instead of end flag of a note */
  699. void                                    PutNoteRelease3FromStartInsteadOfEnd(NoteObjectRec* Note,
  700.                                                 MyBoolean ShouldWeReleasePoint3FromStartInsteadOfEnd);
  701.  
  702. /* change the pitch displacement origin of a note */
  703. void                                    PutNotePitchDisplacementStartOrigin(NoteObjectRec* Note,
  704.                                                 unsigned long NewPitchDisplacementStartOrigin);
  705.  
  706. /* change the detuning pitch conversion mode of a note */
  707. void                                    PutNoteDetuneConversionMode(NoteObjectRec* Note,
  708.                                                 unsigned long NewDetuneConversionMode);
  709.  
  710. /* change the retrigger envelope on tie status of a note */
  711. void                                    PutNoteRetriggerEnvelopesOnTieStatus(NoteObjectRec* Note,
  712.                                                 MyBoolean ShouldWeRetriggerEnvelopesOnTie);
  713.  
  714. /* change the duration adjustment mode of a note */
  715. void                                    PutNoteDurationAdjustMode(NoteObjectRec* Note,
  716.                                                 unsigned long NewDurationAdjustMode);
  717.  
  718. /* change the flag indicating that portamento should use Hertz instead of halfsteps */
  719. void                                    PutNotePortamentoHertzNotHalfstepsFlag(NoteObjectRec* Note,
  720.                                                 MyBoolean ShouldWeUseHertzInsteadOfHalfsteps);
  721.  
  722.  
  723. /* read a note object in from a file.  this does not handle ties since they */
  724. /* are done separately. */
  725. FileLoadingErrors            NoteObjectNewFromFile(NoteObjectRec** ObjectOut,
  726.                                                 struct BufferedInputRec* Input, short FormatVersionNumber);
  727.  
  728. /* write a note object to the file.  this does not handle ties since they are */
  729. /* done separately. */
  730. FileLoadingErrors            NoteObjectWriteDataOut(NoteObjectRec* Note,
  731.                                                 struct BufferedOutputRec* Output);
  732.  
  733. /* make a complete copy of the note/command and any blocks it has allocated */
  734. NoteObjectRec*                DeepCopyNoteObject(NoteObjectRec* Note);
  735.  
  736. #endif
  737.